package com.源码分析;

import reactor.core.publisher.Flux;

public class SubscribeDemo {

	private void demo1() {
		Flux.range(1, 100).subscribe(); // 这是最简单的方法，因为此方法会忽略所有信号。通常，我们会首选其变体方法，但是，触发具有副作用的流处理有时也可能很有用
	}

	private void demo2() {
		Flux.range(1, 100).subscribe(x -> {}); // 对每个值(onNext信号)调用consumer。它不处理onError和onComplete信号
	}

	private void demo3() {
		Flux.range(1, 100).subscribe(x -> {}, x -> {}); // 与2相同，但这里会处理onError信号，onComplete信号会被忽略
	}

	private void demo4() {
		Flux.range(1, 100).subscribe(x -> {}, x -> {}, () -> {}); // 与3相同，但也可以处理onComplete信号
	}

	private void demo5() {
		Flux.range(1, 100).subscribe(data -> {}, err -> {}, () -> {}, subscription -> {
			subscription.request(4);
			subscription.cancel();
		}); // 消费响应式流中的所有元素，包括错误处理和完成信号。重要的是，这种重载方法能通过请求足够数量的数据来控制订阅，当然，请求数量仍然可以是MAX_VALUE
		// 首先请求4个元素，然后立刻取消订阅，因此根本不会生成其他元素。请注意，我们没有收到onComplete信号，因为订阅者在流完成之前就取消了订阅。同样重要的是
		// 响应式流可以由生产者(使用onError或者onComplete信号)，也可以由订阅者通过subscription实例进行取消。此外，Disposable实例也可以用于取消。
	}

}
